package com.mori.algorithm;


import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * <p> 字符个数统计  </p>
 *
 * @author mori
 * @since 10/22/2019 1:35 PM
 */
public class CharacterCount {


    public static void main(String[] args) {
        String s = "5bc63#aouiioiouaa351";
        // 分别统计英文字符的个数
        jdk8LetterCharacterCount(s);
        // 分别统计英文字符的个数
        letterCount(s);
        // 字母的总个数和数字总个数
        letterAndDigitSumCount(s);
    }

    /**
     * 分别统计英文字母的个数 jdk8写法
     *
     * @param s
     */
    public static void jdk8LetterCharacterCount(String s) {
        s = s.replaceAll(" +", "");
        TreeMap<String, Long> result = Arrays.stream(s.split(""))
                .filter(c -> Character.isLetter(c.charAt(0)))
                .collect(Collectors.groupingBy(Function.identity(), TreeMap::new, Collectors.counting()));
        System.out.println(result);
    }

    /**
     * 分别统计英文字母的个数 jdk8以下写法
     *
     * @param s
     */
    public static void letterCount(String s) {
        char[] chars = s.toCharArray();
        Map<Character, Integer> tree = new TreeMap<>();
        for (char c : chars) {
            if (Character.isLetter(c)) {
                Integer count = tree.get(c);
                tree.put(c, count == null ? 1 : count + 1);
            }
        }
        System.out.println(tree);
    }

    /**
     * 统计字母和数字的总个数
     *
     * @param s
     */
    public static void letterAndDigitSumCount(String s) {
        char[] chars = s.toCharArray();
        int letterCount = 0;
        int digitCount = 0;
        for (char c : chars) {
            if (Character.isLetter(c)) {
                letterCount++;
            }else if (Character.isDigit(c)) {
                digitCount++;
            }
        }
        System.out.println("字母总个数是: " + letterCount);
        System.out.println("数字总个数是: " + digitCount);
    }


}
